{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ae8a8369-d097-42dd-bb08-aa82c2d01312",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dotenv:  E:\\work\\code\\ai\\.env\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "from openai import OpenAI\n",
    "from dotenv import load_dotenv, find_dotenv\n",
    "\n",
    "def get_openai_key():\n",
    "    print(\"dotenv: \",find_dotenv())\n",
    "    _ = load_dotenv(find_dotenv())\n",
    "    # api_key = os.environ['OPENAI_API_KEY']\n",
    "    return OpenAI(\n",
    "        api_key = os.environ.get(\"ARK_API_KEY\"),\n",
    "    base_url = \"https://ark.cn-beijing.volces.com/api/v3\",)\n",
    "\n",
    "client = get_openai_key()\n",
    "\n",
    "def get_completion_from_messages(message, model=\"ep-20250103110319-28xth\",temperature = 0, max_tokens=500):\n",
    "    # message = [\n",
    "    #     {\"role\": \"user\", \"content\": prompt},\n",
    "    # ]\n",
    "    completion = client.chat.completions.create( \n",
    "    model = model,  # your model endpoint ID\n",
    "    messages =message,\n",
    "    temperature=temperature,\n",
    "    max_tokens=max_tokens\n",
    "    )\n",
    "    return completion.choices[0].message.content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "4d80b5c4-2418-4950-b0b4-5fcd3887bf66",
   "metadata": {},
   "outputs": [],
   "source": [
    "delimiter = '==='\n",
    "system_message = f\"\"\" \n",
    "按照以下步骤回答客户的提问。客户的提问将以{delimiter}分隔。 \n",
    "步骤1: {delimiter} 首先确定客户是否正在询问有关特定产品或产品的问题。 产品类别不计入范围。 \n",
    "步骤2：{delimiter} 如果用户询问特定产品， 请确认产品是否在以下列表中 ， 所有可用产品。\n",
    "\n",
    "产品：TechPro 超极本\n",
    "类别：计算机和笔记本电脑\n",
    "品牌：TechPro\n",
    "型号：TP-UB100\n",
    "保修期：1 年\n",
    "评分：4.5\n",
    "特点：13.3 英寸显示屏，8GB RAM，256GB SSD，Intel Core i5 处理器\n",
    "描述：一款适用于日常使用的时尚轻便的超极本。\n",
    "价格：$799.99\n",
    "\n",
    "产品：BlueWave 游戏笔记本电脑\n",
    "类别：计算机和笔记本电脑\n",
    "品牌：BlueWave\n",
    "型号：BW-GL200\n",
    "保修期：2 年\n",
    "评分：4.7\n",
    "特点：15.6 英寸显示屏，16GB RAM，512GB SSD，NVIDIA GeForce RTX 3060\n",
    "描述：一款高性能的游戏笔记本电脑，提供沉浸式体验。\n",
    "价格：$1199.99\n",
    "\n",
    "产品：PowerLite 可转换笔记本电脑\n",
    "类别：计算机和笔记本电脑\n",
    "品牌：PowerLite\n",
    "型号：PL-CV300\n",
    "保修期：1年\n",
    "评分：4.3\n",
    "特点：14 英寸触摸屏，8GB RAM，256GB SSD，360 度铰链\n",
    "描述：一款多功能可转换笔记本电脑，具有响应触摸屏。\n",
    "价格：$699.99\n",
    "\n",
    "产品：TechPro 台式电脑\n",
    "类别：计算机和笔记本电脑\n",
    "品牌：TechPro\n",
    "型号：TP-DT500\n",
    "保修期：1年\n",
    "评分：4.4\n",
    "特点：Intel Core i7 处理器，16GB RAM，1TB HDD，NVIDIA GeForce GTX 1660\n",
    "描述：一款功能强大的台式电脑，适用于工作和娱乐。\n",
    "价格：$999.99\n",
    "\n",
    "产品：BlueWave Chromebook\n",
    "类别：计算机和笔记本电脑\n",
    "品牌：BlueWave\n",
    "型号：BW-CB100\n",
    "保修期：1 年\n",
    "评分：4.1\n",
    "特点：11.6 英寸显示屏，4GB RAM，32GB eMMC，Chrome OS\n",
    "描述：一款紧凑而价格实惠的 Chromebook，适用于日常任务。\n",
    "价格：$249.99\n",
    "\n",
    "步骤3：{delimiter} 如果消息中包含上述列表中的产品，请列出用户在消息中做出的任何假设。 \\\n",
    "例如笔记本电脑x 比笔记本Y大， 或者笔记本电脑Z有2年保修期。\n",
    "步骤4： {delimiter} 如果用户做出了任何假设， 请根据产品信息确认假设是否正确。\n",
    "步骤5：  {delimiter} 如果用户有任何错误假设， 请先礼貌的纠正客户的错误假设(如果合适)。 只提及或引用可用产品列表中的产品，因为这是商品销售的唯一五款产品。 以友好的口吻回答客户。delimiter\n",
    "\n",
    "使用以下格式回答问题：\n",
    "步骤 1: {delimiter} <步骤 1 的推理>\n",
    "步骤 2: {delimiter} <步骤 2 的推理>\n",
    "步骤 3: {delimiter} <步骤 3 的推理>\n",
    "步骤 4: {delimiter} <步骤 4 的推理>\n",
    "回复客户: {delimiter} <回复客户的内容>\n",
    "\n",
    "请确保每个步骤上面的回答中中使用 {delimiter} 对步骤和步骤的推理进行分隔。\n",
    "\"\"\" \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "fbfe655c-5973-417c-97eb-81a5ee797570",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "步骤 1: === 用户正在询问有关特定产品BlueWave Chromebook和TechPro台式电脑的价格差异问题。\n",
      "步骤 2: === 消息中提及的BlueWave Chromebook和TechPro台式电脑均在可用产品列表中。\n",
      "步骤 3: === 用户没有做出任何假设。\n",
      "步骤 4: === 由于用户没有假设，不存在需要确认假设是否正确的情况。\n",
      "回复客户: === BlueWave Chromebook的价格是$249.99 ，TechPro台式电脑的价格是$999.99，所以TechPro台式电脑比BlueWave Chromebook贵$750（$999.99 - $249.99） 。 \n"
     ]
    }
   ],
   "source": [
    "user_message = f\"\"\" BlueWave Chromebook 比 TechPro 台式电脑贵多少？ \"\"\" \n",
    "messages = [\n",
    "    {\n",
    "        'role':'system',  'content': system_message\n",
    "    },\n",
    "    {\n",
    "        'role':'user', 'content': f\" {delimiter}{user_message}{delimiter}\"\n",
    "    }\n",
    "]\n",
    "\n",
    "response = get_completion_from_messages(messages)\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "660d23d5-5eac-4bf6-adb0-ab4949a81189",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "步骤 1: === 客户没有询问有关特定产品的问题，而是在询问是否有电视机这一产品类别。\n",
      "步骤 2: === 由于客户询问的不是列表中的特定产品，所以此步骤无需进一步操作。\n",
      "步骤 3: === 因为客户没有提及列表中的产品，所以不存在假设。\n",
      "步骤 4: === 由于没有假设，所以此步骤无需进一步操作。\n",
      "回复客户: === 您好，我们目前没有电视机出售哦，我们这里有计算机和笔记本电脑类的产品，包括TechPro超极本、BlueWave游戏笔记本电脑、PowerLite可转换笔记本电脑、TechPro台式电脑和BlueWave Chromebook，您有兴趣了解一下吗？ \n"
     ]
    }
   ],
   "source": [
    "user_message = f\"\"\" 你有电视机吗 \"\"\" \n",
    "messages = [\n",
    "    {\n",
    "        'role':'system',  'content': system_message\n",
    "    },\n",
    "    {\n",
    "        'role':'user', 'content': f\" {delimiter}{user_message}{delimiter}\"\n",
    "    }\n",
    "]\n",
    "\n",
    "response = get_completion_from_messages(messages)\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "86740b11-15fe-4c00-9274-16a49fc2e7bd",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.21"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
